Data Source এবং Delegate Methods iOS ডেভেলপমেন্টে অত্যন্ত গুরুত্বপূর্ণ দুটি প্যাটার্ন, বিশেষ করে যখন আমরা UITableView বা UICollectionView এর মতো UI কম্পোনেন্ট ব্যবহার করি। এগুলো অ্যাপ্লিকেশনের ডেটা এবং ইউজার ইন্টারেকশন ম্যানেজ করার জন্য ব্যবহৃত হয়।
Data Source এবং Delegate Methods কি?
- Data Source প্যাটার্ন ব্যবহার করে ডেটা ম্যানেজ করা হয়। এটি মূলত একটি প্রোটোকল যা কোনো কম্পোনেন্টের জন্য প্রয়োজনীয় ডেটা প্রোভাইড করে।
- Delegate Methods প্যাটার্ন ব্যবহার করে ইউজার ইন্টারেকশন বা কিছু নির্দিষ্ট ইভেন্ট হ্যান্ডল করা হয়। এটি সাধারণত ইউজারের অ্যাকশন বা UI কম্পোনেন্টের স্টেট পরিবর্তনের প্রতিক্রিয়া জানাতে ব্যবহৃত হয়।
UITableView এবং UICollectionView-তে Data Source এবং Delegate Methods
iOS-এ UITableView এবং UICollectionView এর মধ্যে Data Source এবং Delegate Methods ব্যবহার করে ডেটা প্রদর্শন ও ইউজার ইন্টারেকশন ম্যানেজ করা হয়।
১. UITableView Data Source Methods
UITableViewDataSource প্রোটোকল ডেটা ম্যানেজ করার জন্য ব্যবহৃত হয়। এই প্রোটোকলে কিছু গুরুত্বপূর্ণ মেথড রয়েছে:
প্রাথমিক মেথডসমূহ:
numberOfSections(in:):
- কতটি সেকশন থাকবে তা নির্ধারণ করে।
- উদাহরণ:
func numberOfSections(in tableView: UITableView) -> Int {
return 1 // একটিমাত্র সেকশন
}
tableView(_:numberOfRowsInSection:):
- প্রতিটি সেকশনে কতটি রো থাকবে তা নির্ধারণ করে।
- উদাহরণ:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count // items অ্যারের ডেটার উপর ভিত্তি করে রো সংখ্যা
}
tableView(_:cellForRowAt:):
- প্রতিটি রো এর জন্য একটি সেল তৈরি ও কনফিগার করে।
- উদাহরণ:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath)
cell.textLabel?.text = items[indexPath.row] // items অ্যারের ডেটা দিয়ে সেল কনফিগার করা
return cell
}
২. UITableView Delegate Methods
UITableViewDelegate প্রোটোকল ইউজার ইন্টারেকশন ম্যানেজ করতে এবং টেবিলের বিভিন্ন ইভেন্টে প্রতিক্রিয়া জানাতে ব্যবহৃত হয়।
গুরুত্বপূর্ণ মেথডসমূহ:
tableView(_:didSelectRowAt:):
- কোনো রো সিলেক্ট করা হলে এই মেথডটি কল হয়।
- উদাহরণ:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Selected row at \(indexPath.row)")
// ডেটা বা অ্যাকশন হ্যান্ডল করা
}
tableView(_:heightForRowAt:):
- প্রতিটি রো এর জন্য হাইট নির্ধারণ করে।
- উদাহরণ:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 60.0 // প্রতিটি রো এর হাইট ৬০ পিক্সেল
}
tableView(_:willDisplay:forRowAt:):
- যখন একটি সেল প্রদর্শিত হওয়ার ঠিক আগে এই মেথডটি কল হয়, এখানে সেলের কাস্টমাইজেশন করা যায়।
- উদাহরণ:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.backgroundColor = indexPath.row % 2 == 0 ? .lightGray : .white
}
UICollectionView Data Source Methods
UICollectionView ও প্রায় একইভাবে কাজ করে, তবে এটি সেলগুলোকে গ্রিড বা কাস্টম লেআউট আকারে প্রদর্শন করে। UICollectionViewDataSource প্রোটোকল ব্যবহার করে ডেটা ম্যানেজ করা হয়।
প্রাথমিক মেথডসমূহ:
numberOfSections(in:):
- কতটি সেকশন থাকবে তা নির্ধারণ করে।
- উদাহরণ:
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
collectionView(_:numberOfItemsInSection:):
- প্রতিটি সেকশনে কতটি আইটেম থাকবে তা নির্ধারণ করে।
- উদাহরণ:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return items.count
}
collectionView(_:cellForItemAt:):
- প্রতিটি আইটেমের জন্য একটি সেল তৈরি ও কনফিগার করে।
- উদাহরণ:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellIdentifier", for: indexPath) as! CustomCollectionViewCell
cell.label.text = items[indexPath.item]
return cell
}
UICollectionView Delegate Methods
UICollectionViewDelegate প্রোটোকল ইউজার ইন্টারেকশন ম্যানেজ করতে ব্যবহৃত হয়, যেমন সেল সিলেকশন বা লেআউটের সাথে সম্পর্কিত ইভেন্টগুলো।
গুরুত্বপূর্ণ মেথডসমূহ:
collectionView(_:didSelectItemAt:):
- কোনো আইটেম সিলেক্ট করা হলে এই মেথডটি কল হয়।
- উদাহরণ:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("Selected item at \(indexPath.item)")
}
collectionView(_:layout:sizeForItemAt:):
- প্রতিটি সেল এর সাইজ নির্ধারণ করে।
- উদাহরণ:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 100, height: 100)
}
Data Source এবং Delegate সেটআপ করা
Data Source এবং Delegate সেটআপ করতে ভিউ কন্ট্রোলারের ভিউডিডলোড মেথডে নিচের মতো কোড লেখা হয়:
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
}
- এখানে, self হিসেবে UITableViewDataSource এবং UITableViewDelegate প্রোটোকল ইমপ্লিমেন্ট করতে হবে।
উপসংহার
- Data Source এবং Delegate মেথডের মাধ্যমে UITableView এবং UICollectionView-এ ডেটা ম্যানেজ এবং ইন্টারেকশন হ্যান্ডল করা যায়।
- Data Source মূলত ডেটা সম্পর্কিত মেথডগুলোর মাধ্যমে ডেটা সাপ্লাই করে, এবং Delegate মেথড ইউজার ইন্টারেকশন বা UI কাস্টমাইজেশনের জন্য ব্যবহৃত হয়।
Read more